package com.wangyadong.hobby.schedule.jobtask.classload.chapter1test;

/**
 * <p>
 *
 * @author <714037465@qq.com>
 * @since 2018/11/1311:03
 * <p>
 * 类加载的过程分为三步：加载-链接-初始化
 * 首先类按照顺序加载
 * 然后连接分为三个阶段
 * 1.验证
 * 文件格式的验证:魔术因子，版本号，字节流，常量池中的数据，常量的引用等等
 * 元数据的验证：是否被final修饰，是不是抽象类，是不是有父类，子类这些，重载的合法性，
 * 字节码验证:保持当前指针不会被其他类引用，程序计数器中的指令，不会跳转到不合法的字节码中
 * 符号验证:比如说引用类中的字段，方法，是否对当前的类课件等等，
 * 2.准备，当验证通过之后，便开始为类的静态变量赋初始值，
 * 3.解析，所谓解析就是指，刚刚验证，并且初始化的常量寻找这些常量的类，接口，方法的符号引用，并且将这些符号引用转换成直接引用
 * 初始化静态变量的值
 **/
public class Singleton {

    public Singleton() {
        x++;
        y++;
    }

    public static int x = 0;
    public static int y;
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
        return instance;
    }

    public static void main(String[] args) {
        Singleton instance = getInstance();
        System.out.println(instance.x);
        System.out.println(instance.y);
    }

}
